package com.liuhouse;

import java.util.function.Function;
import java.util.function.IntBinaryOperator;
import java.util.function.IntConsumer;
import java.util.function.IntPredicate;

public class LambdaQuery01 {

    public static void main(String[] args) {
//        test01();

//        int sum = calculateNum(new IntBinaryOperator() {
//            @Override
//            public int applyAsInt(int left, int right) {
//                System.out.println("left " + left);
//                System.out.println("right " + right);
//                return left + right;
//            }
//        });
//        System.out.println(sum);
//
//    使用lambda
//        int num = calculateNum((int a, int b) -> {
//            System.out.println("a" + a);
//            System.out.println("b" + b);
//            return a + b;
//        });
//        System.out.println(num);

//        printNum((value) -> value % 2 == 0);

        //使用正常的方式进行调用
//        Integer integer_num = typeConvert(new Function<String, Integer>() {
//            @Override
//            public Integer apply(String s) {
//                //将字符串转化为整数
//                return Integer.valueOf(s);
//            }
//        });
//        System.out.println(integer_num);

        //使用lambada表达式进行调用
//        Integer convert_num = typeConvert((String s) -> {
//            return Integer.valueOf(s);
//        });
//        System.out.println(convert_num);

        //使用原始方式进行调用
//        foreachArr(new IntConsumer() {
//            @Override
//            public void accept(int value) {
//                String val_str = String.valueOf(value);
//                System.out.println(val_str + "---");
//            }
//        });



        //使用lambda表达式进行使用
        foreachArr(value -> {
            String val_str = String.valueOf(value);
            System.out.println(val_str + "---");
        });



    }


    public static void foreachArr(IntConsumer consumer){
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for(int i : arr){
            //当调用接口里面的方法的时候就会去调用者那里的重新的方法去使用
            consumer.accept(i);
        }
    }

    //进行数据类型的转换
    public static <R> R typeConvert(Function<String , R> function){
        String str = "1234";
        R result = function.apply(str);
        return result;
    }


    public static void printNum(IntPredicate predicate){
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for(int i : arr){
            if(predicate.test(i)){
                System.out.println(i);
            }
        }
    }

    public static int calculateNum(IntBinaryOperator operator){
        int a = 10;
        int b = 20;
        return operator.applyAsInt(a , b);
    }


    public static void test01(){
        //使用普通的写法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("你知道吗?lambda");
            }
        });

        //使用lambda表达式
        new Thread(() -> {
            System.out.println("你知道吗?我使用的是lambda表达式!");
        }).start();


    }

}
